迭代数组
使用 nditer 对其进行迭代:
语法:
np.nditer(iterable, op_flags = 'readonly',flags = 'c_index')
| 参数 | 说明 |
|---|---|
| iterable | 遍历的数组 |
| op_flags | 为了在遍历数组的同时实现对数组元素值的修改,必须制定 readwrite或 writeonly 模式 |
| flags | c_index : 可以跟踪 C 语言顺序的索引 f_index : 可以跟踪 Fortran 语言顺序的索引 multi-index : 每次迭代可以跟踪一种索引类型 external_loop : 给出的值是具有多个值的一维数组,而不是零维数组 |
np_ar = np.arange(6).reshape(2,3)
print('原始数组:\n{}'.format(np_ar))
print('迭代输出元素:')
for x in np.nditer(np_ar):
print(x,end=',')
# 输出结果:
# 原始数组:
# [[0 1 2]
# [3 4 5]]
# 迭代输出元素:
# 0,1,2,3,4,5,
for x in np.nditer(np_ar,order = 'F'):
print(x,end=',')
# 输出结果:
# 0,3,1,4,2,5,
for x in np.nditer(np_ar, order = 'F') # Fortran order 列序优先
for x in np.nditer(np_ar, order = 'C') # C order 行序优先
np_ar = np.arange(0,60,5).reshape(3,4)
print('原始数据:\n{}'.format(np_ar))
c_order_up = np_ar.copy(order = 'C')
print('以 C语言格式顺序排序:\n{}'.format(c_order_up))
f_order_up = np_ar.copy(order = 'F')
print('以 fortran 语言格式顺序排序:\n{}'.format(f_order_up))
# 输出结果:
# 原始数据:
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
# 以 C语言格式顺序排序:
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
# 以 fortran 语言格式顺序排序:
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
遍历数组的同时修改数据:
np_ar = np.arange(0,60,5).reshape(3,4)
print('原始数据:\n{}'.format(np_ar))
for x in np.nditer(np_ar, op_flags = ['writeonly']):
x[...] = 2*x
print('修改后的数据\n{}'.format(np_ar))
# 输出结果:
# 原始数据:
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
# 修改后的数据
# [[ 0 10 20 30]
# [ 40 50 60 70]
# [ 80 90 100 110]]
迭代器对每列进行遍历,并组合为一维数组:
np_ar = np.arange(0,60,5).reshape(3,4)
print('原始数据:\n{}'.format(np_ar))
for x in np.nditer(np_ar, flags = ['external_loop'], order = 'F'):
print(x, end = ',')
# 输出结果:
# 原始数据:
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
# [ 0 20 40],[ 5 25 45],[10 30 50],[15 35 55],